python_base={
    "IDE":{
        "IDLE":[
            "操作: 了解了怎么使用IDLE编写代码，如何进行代码保存和运行等基础操作，掌握程度80分",
            "意义: 能快速编写代码，运行简单的程序，对于初学者来说比较友好，操作简单容易上手，能很快熟悉操作为接下来学习其他编写程序的软件做好准备,但熟悉代码编写后一般不使用它来编写，意义80分"
        ],
        "JUPYTER":[
            "操作：能一边编写代码一边查看代码编写的情况和结果，掌握了如何在jupyter上编写代码，掌握程度80分",
            "意义: 让编写代码更清晰，更方便，可以随时验证代码编写的情况，还可以用不同语法编写，比如markdown语法也可以在jupyter上编写，意义90分"
        ],
        "pycharm":[
            "操作: 功能比idle更多，更好，可以取代idle，不过操作方法与idle差不多，掌握程度：78分",
            "意义: PyCharm拥有一般IDE具备的功能，还提供了一些功能可以用于开发。编写的程序和代码可以保存在pycharm的目录下，容易找，不占空间。意义90分"
        ]
    },
    "python_知识点":{
        "python模块":{
            "os模块":{
                "os介绍":"os模块包含普遍的操作系统功能",
                "包含的主要函数":[
                    "os.getcwd() 获取当前工作目录",
                    "os.environ 获取系统环境变量",
                    "getenv(“HOME”)用于获取程序所在的当前用户的全路径。"
                ]
            },
            "sys模块":{
                "sys介绍":"此模块可供访问由解释器使用或维护的变量和与解释器进行交互的函数",
                "包含的主要函数":[
                    "sys.version 获取Python解释程序的版本信息",
                    "sys.platform 返回操作系统平台名称"
                ]
            },
            "datetime模块":{
                "datetime介绍":"模块重新封装了time模块，提供更多接口",
                "包含的主要函数":[
                    "datetime.datetime.now() 返回当前时间",
                    "datetime.date.today().day/month/year 返回今日时间的日/月/年"
                ]
            },
            "time模块":{
                "time介绍":"时间相关的操作",
                "包含的主要函数":[
                    "time.asctime() 返回时间格式,Thu Mar 30 16:47:39 2017 (星期 月 日  时间  年)",
                    "time.strftime()括号内传入字符串 把时间对象转换成时间格式的字符串"
                ]
            },
        },
        "pthon入门":{
            "主要内容":[
                "了解idle窗口","如何执行代码，依次执行一条语句",
                "函数+模块=标准库","数据结构是内建的",
                "调用模块的方法包含结果",
                "代码组可以包含嵌套代码组",
                "迭代处理一个对象序列，指定次数",
                "让执行暂停",
                "了解代码缩进"
            ],
            "包含主要函数":[
                "if条件函数",
                "elif函数，和if一起使用",
                "for循环","range函数，让程序循环运行几次"
            ],
            "拓展练习":[
                "for循环编写99乘法表",
                "if函数编写课程提醒",
                "if函数编写随机祝福语句"
            ],
        },
        "pthon内置数据结构":{
            "列表":{
                "介绍":"列表是有序的可变对象集合。列表是异构的，不需要预先声明存储的对象类型，可以在一个列表中混合不同类型对象。",
                "写法":"用中括号包围，列表中包含的对象之间总是用逗号分隔。",
                "包含的主要函数":[
                    "len 内置函数报告一个对象的大小,列出列表元素个数","append 在列表末尾增加一个元素",
                    "用not in检查成员关系",
                    "remove 从列表中删除指定数据值的第一次出现，如果在列表中没有找到这个值，会报错",
                    "pop 根据对象索引值从现有列表删除和返回一个对象",
                    "extend 将其中各个对象增加到现有列表，可将两个列表合并为一个",
                    "insert 取一个索引值和一个对象作为参数，在列表任意位置增加对象",
                    "copy 复制数据结构",
                    "count 统计某个元素在列表中出现的次数",
                    "index 从列表中找出某个值第一个匹配项的索引位置",
                    "list() 将元组转换为列表"
                ],
            },
            "字典":{
                "介绍":"字典是用来保存键/值对的集合，其中每个唯一的键有一个与之关联的值。python字典的键部分通常是一个字符串，关联的值部分可以是任意的python对象。字典不会维持插入顺序，字典是无序的。",
                "写法":"整个字典要用大括号包围。每个键用引号包围，因为他们是字符串。各个值如果是字符串也要用引号包围，值不一定非得是字符串。各个键与关联值之间用冒号（：）分隔。每一个键值对与下一键值对用逗号分隔。",
                "包含的主要内容":[
                    "字典使用键来访问其关联的数据值",
                    "了解中括号记法如何处理字典，是理解如何在运行中扩展字典的核心。如果有一个字典，可以为一个新键（放在中括号里）赋一个对象为字典增加新的键/值对。",
                    "频度计数数据结构,用0初始化一个字典并递增一个键的关联值更新字典",
                    "迭代处理字典使用'for'循环，没有出现频度计数，只显示了键。要访问关联数据值要把各个键放在中括号里，结合字典名和键访问与这个键关联的值。",
                    "实现有顺序的输出可以利用sorted函数,每次需要按某种顺序迭代时都要调用sorted函数",
                    "用items 迭代处理字典",
                    "避免keyerror 用in检查成员关系",
                    "用not in 替代 in应用",
                    "用setdefault方法替代if not in",],
            },
            "集合":{
                "介绍":"集合不允许有重复，集合也是无序的。作为一个集合，可以完成差集、交集、并集等集合类操作。",
                "写法":"对象之间用逗号分隔，包围在大括号里。",
                "包含主要函数":[
                    "用set函数创建元音集合",
                    "union合并集合,合并两个集合，去除相同的元素，得到由唯一元素组成的一个新的集合",
                    "difference 告诉你那些不是共有元素,给定两个集合，告诉你哪些元素只在一个集合中而不在另一个集合中",
                    "intersection报告共同对象,取一个集合中的对象，与另一个集合中的对象进行比较，然后报告共同对象",
                ],
            },
            "元组":{
                "介绍":"元组是不可变的，就像一个一旦创建就不能改变的列表.",
                "写法":"元素之间用逗号分隔开，用小括号包围。",
                "主要内容":[
                    "要让元组真正成为元组，每一个元组在小括号之间至少包含一个逗号，即使这个元组只包含一个对象也不例外。",
                    "拓展：存储一个数据表,并可视化显示复杂数据结构。",
                    "应用：访问一个复杂的数据结构的数据。"
                ]
            },
            "数据结构拓展练习":[
                "尝试用占位符、format2种方式打印学生信息",
                "课表查询练习，用户输入查询日期和时间，可返回对应的课表信息；用户查询当前时间，可返回当前课表信息",
                "猜数字练习",
                "人脸字典查询并存入新列表练习",
            ],
        },
        "python函数与模块":{
            "函数介绍":"函数是逻辑结构化和过程化的一种编程方法。Python使用“函数”这个词描述一个可重用的代码块。如果函数要作为一个python类的一部分，它就成为一个方法。",
            "代码重用":"重用Python中的代码，以函数开始，也是以函数结束。 取几行代码，为它们指定一个名字，你就得到了一个（可以重用的）函数，取一组函数把他们打包成一个文件，你就得到了一个模块（也可以重用）。",
            "引入函数":[
                "函数引入两个关键字：def和return",
                "函数可以接受参数数据",
                "函数包含代码，通常还有注释文档"
            ],
            "用def命名代码块":[
                "一旦确定希望重用的Python代码块，就可以创建一个函数。要用def关键字（这是define的缩写）创建函数。",
                "创建函数写法:def关键字后面是函数名、一个可选的空参数表(用小括号包围)，一个冒号，然后一行或多行代码。",
            ],
            "调用函数":"要调用函数需要提供函数名以及这个函数需要的所有参数的值",
            "函数注释":[
                "为代码增加注释有两种方法，可以使用三重引号字符串””” str“””，这个称为docstring ，也可以使用单行注释，这种注释有种 # 符号前缀",
                "函数注解是可选的。",
                "函数注解可以提供信息。"
            ],
            "python代码格式化":"每级缩进使用4个空格，模块与其包裹元素对齐，所有行限制的最大字符数为79，顶层函数和类的定义前后用两个空行隔开。",
            "形参与实参":[
                "形参是函数完成其工作时所需要的信息。",
                "实参是调用函数时传递给函数的信息。",
                "形参是虚拟的，不占用空间，形参变量只有在被调用时才分配内存单元，实参是一个变量，占用内存空间，数据传递单向，实参传给形参，不能倒过来。",
                "位置实参要确认函数调用中实参的顺序与函数定义形参的顺序一致",
                "注意关键字参数与默认值之间的用法和区别"
            ],
            "函数的返回值":[
                "函数返回的值被称为函数的返回值，在函数中，可用return语句将值返回到调用函数的代码行","有返回值可以直接进行赋值",
                "函数返回多个值：函数可以返回任意类型的值，包括列表、字典和集合等较为复杂的数据结构。"
            ],
            "*args函数":"*args，传入多个参数，转化成元组。*args的值是一个封装好的空元组，并将所有接收到的值都封装在这个元组里。",
            "**kwargs函数":"**kwargs，把关键字参数，转化成字典。",
            "函数与模块优点":[
                "函数的优点之一是将代码与主程序分离",
                "我们可以更进一步，将函数存储在被称为“模块”的独立文件中，再将模块导入主程序",
                "import语句允许我们在当前运行的程序文件中使用模块中的代码",
                "通过将函数存储在独立的文件中，可隐藏程序代码的细节，将重点放在程序的高层逻辑上",
                "可以让不同的程序中重用函数",
                "可与其他程序员共享这些文件而不是整个程序",
                "知道如何导入函数能让你使用其他程序员编写的函数库"
            ],
            "导入整个模块":{
                "语法":" import  模块名称",
                "注意":"模块所在的py文件的名称就是模块的名称导入模块要注意模块的py文件与主程序文件在一个目录下",
                "as用法":"导入的模块的名称太长可以用as 自定义一个名称来代替模块的名称",
                "模块中导入函数":[
                    "如果一个模块中有多个函数，但是我只想用其中的一个函数，可以直接导入该函数。",
                    "语法:from 模块名称 import 函数名称",
                    "导入模块中所有函数：可以使用星号（*）运算符让Python导入模块中的所有函数，语法：from 模块名 import * ",
                ],
                "函数补充":"函数可以的引用，函数可以调用函数",
                "局部变量与全局变量":[
                    "全局变量在整个程序全局都是有效的，局部变量只是在某个函数的内部起作用",
                    "global 可以在函数内部修改全局变量",
                    "可以使用global 在函数的内部修改全局变量，但是不建议使用，容易造成紊乱",
                ],
                "函数递归特征":[
                    "必须有一个明确的结束条件",
                    "每次进入更深一层递归时，问题规模相比上次递归应有所减少。",
                    "递归效率不高，递归次数过多会导致栈溢出（在计算机中，函数调用是通过栈（stack）这种数据结构实现的，每当进入一个函数调用，栈就会多加一层栈帧，每当函数返回，栈就会减少一层栈帧。由于栈的大小不是无限的，所以，递归调用的次数过多，会导致栈溢出。）",
                ],
                "函数练习":[
                    "开发一个求和函数 sumtest(a)，计算出1+2+3+…+a的值",
                    "开发一个求和函数 sumtest2(a, b) 其中（a<b），可以计算出a+(a+1)+(a+2)+…+b的值",
                    "利用参数*args，编写一个函数，输入多个数字可以自动按照从小到大的顺序排列。",
                    "利用参数**kwargs，编写一个函数，结合空列表与空字典制作一个字典的存储器，函数调用部分只是负责输入。"
                ],
            }
        },
    },
}